fontchooser: Only compare font descriptions when families match
authorBenjamin Otte <otte@redhat.com>
Wed, 21 Sep 2011 03:44:22 +0000 (05:44 +0200)
committerBenjamin Otte <otte@redhat.com>
Thu, 22 Sep 2011 19:44:05 +0000 (21:44 +0200)
This way, we can find fonts way quicker as we only need to create font
descriptions for fonts with matching families. Most importantly, we're
rather quick in the "the font doesn't exist" case.

gtk/gtkfontchooserwidget.c

index e3844a963c9c28416ad5814f12ee9e93f4f24d71..346c9a4f037f2557498d768b72a20b8c0cfdcc96 100644 (file)
@@ -874,6 +874,13 @@ gtk_font_chooser_widget_finalize (GObject *object)
   G_OBJECT_CLASS (gtk_font_chooser_widget_parent_class)->finalize (object);
 }
 
+static gboolean
+my_pango_font_family_equal (const char *familya,
+                            const char *familyb)
+{
+  return g_ascii_strcasecmp (familya, familyb) == 0;
+}
+
 static gboolean
 gtk_font_chooser_widget_find_font (GtkFontChooserWidget        *fontchooser,
                                    const PangoFontDescription  *font_desc,
@@ -882,12 +889,24 @@ gtk_font_chooser_widget_find_font (GtkFontChooserWidget        *fontchooser,
 {
   GtkFontChooserWidgetPrivate *priv = fontchooser->priv;
   PangoFontDescription *desc;
+  PangoFontFamily *family;
   gboolean valid;
 
+  if (pango_font_description_get_family (font_desc) == NULL)
+    return FALSE;
+
   for (valid = gtk_tree_model_get_iter_first (priv->model, iter);
        valid;
        valid = gtk_tree_model_iter_next (priv->model, iter))
     {
+      gtk_tree_model_get (priv->model, iter,
+                          FAMILY_COLUMN, &family,
+                          -1);
+
+      if (!my_pango_font_family_equal (pango_font_description_get_family (font_desc),
+                                       pango_font_family_get_name (family)))
+        continue;
+
       desc = tree_model_get_font_description (priv->model, iter);
 
       pango_font_description_merge_static (desc, font_desc, FALSE);